package pe.com.bbva.mantenimiento.dao.impl;

import java.util.List;

import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import pe.com.bbva.mantenimiento.dao.ProveedorDAO;
import pe.com.bbva.mantenimiento.domain.Proveedor;
import pe.com.bbva.util.Constantes;
import pe.com.stefanini.core.dao.GenericDAOImpl;
import pe.com.stefanini.core.exceptions.BOException;
import pe.com.stefanini.core.exceptions.DAOException;

@Service("proveedorDAO")
public class ProveedorDAOImpl extends GenericDAOImpl<Proveedor> implements
		ProveedorDAO {

	@Autowired
	public ProveedorDAOImpl(SessionFactory sessionFactory) {
		super(sessionFactory);
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Proveedor> findProveedores(Proveedor proveedor)
			throws BOException, DAOException {
		String where = "";
		if(proveedor.getCodigoProveedor()!= null && !proveedor.getCodigoProveedor().equals("")){
			where = where + (where==""?"":" AND ") + "codigoProveedor = '" + proveedor.getCodigoProveedor() + "' ";
		}
		if(proveedor.getNombre()!= null && !proveedor.getNombre().equals("")){
			where = where + (where==""?"":" AND ") + "upper(nombre) like upper('%" + proveedor.getNombre() + "%') ";
		}
		if(proveedor.getNombreArchivo()!= null && !proveedor.getNombreArchivo().equals("")){
			where = where + (where==""?"":" AND ") + "upper(nombreArchivo) like upper('%" + proveedor.getNombreArchivo() + "%') ";
		}
		if(proveedor.getTipo()!=null){
			if(proveedor.getTipo().getId()!= null && !proveedor.getTipo().getId().equals("")){
				where = where + (where==""?"":" AND ") + "tipo = '" + proveedor.getTipo().getId() + "'";
			}
		}
		if(proveedor.getEstado()!= null && !proveedor.getEstado().equals("") && !proveedor.getTipo().equals("0") ){
			where = where + (where==""?"":" AND ") + "estado = '" +	proveedor.getEstado() + "'";
		}
		if(!where.equals("")){
			where = Constantes.WHERE_CLAUSE + where;
		}
		
		String orders = " order by fechaCreacion, nombre";
		List<Proveedor> listaProveedores = super.executeQuery(Proveedor.class, where, orders);
		return listaProveedores;
	}
}